# www.numpy.org.cn
import numpy as np
# 自制的数据集
import dataset 
# 绘图工具库
from matplotlib import pyplot as plt
# 1 获取100组numpy数组随机数据
m=100
xs,ys = dataset.get_xy_dateset(m)
# 绘制第一个图
plt.subplot(121)
# 标题
plt.title("e-w", fontsize=12)
# # 横坐标
# plt.xlabel("美貌")
# # 纵坐标
# plt.ylabel("毒性")
# # 填充散点数据 画点
# plt.scatter(xs,ys)

# 2 w参数
w=0.5
# 3 预测函数 y=w*x
y_pre = w*xs
# 4 均方误差es
es = (ys - y_pre)**2
# 5 方差求和
sum_e = np.sum(es)
# 6 平均误差 m 100个样本
sum_e = (1/m)*sum_e
print(sum_e)
# 7 第2~6是一个w的均方误差计算
#   下面展示w与e的关系变化二维图
ws = np.arange(0,3,0.1)
es=[]
for w in ws:
    y_pre = w*xs
    e = (1/m)*np.sum((ys - y_pre)**2)
    print("w:"+str(w)+" e:"+str(e))
    es.append(e)

# 填充散点数据 划线
plt.plot(ws,es)

# 用抛物线顶点坐标公式求出最低点w
w_low = np.sum(xs*ys)/np.sum(xs*xs)
e_low = (1/m)*np.sum((ys - w_low*xs)**2) 
plt.scatter(w_low,e_low)

# 绘制第2个图
plt.subplot(122)
# 标题
plt.title("x-y", fontsize=12)
# 填充散点数据 画点
plt.scatter(xs,ys)
# 填充散点数据 划线
y_pre = w_low*xs
plt.plot(xs,y_pre)
# 显示,刷新图像
plt.show()
